package com.zbkj.service.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.zbkj.common.model.traceability.TraceabilityLogs;
import com.zbkj.common.page.CommonPage;
import com.zbkj.common.request.traceability.TraceabilityLogsPageRequest;
import com.zbkj.common.request.traceability.TraceabilityLogsRequest;

import java.util.List;

/**
 * 追溯日志Service接口
 * +----------------------------------------------------------------------
 * | CRMEB [ CRMEB赋能开发者，助力企业发展 ]
 * +----------------------------------------------------------------------
 * | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
 * +----------------------------------------------------------------------
 * | Licensed CRMEB并不是自由软件，未经许可不能去掉CRMEB相关版权
 * +----------------------------------------------------------------------
 * | Author: xiaolic
 * +----------------------------------------------------------------------
 */
public interface TraceabilityLogsService extends IService<TraceabilityLogs> {

    /**
     * 分页查询追溯日志列表
     * @param request 分页请求参数
     * @return 分页结果
     */
    PageInfo<TraceabilityLogs> getPageList(TraceabilityLogsPageRequest request);

    /**
     * 创建追溯日志
     * @param request 创建请求参数
     * @return 创建结果
     */
    Boolean create(TraceabilityLogsRequest request);

    /**
     * 更新追溯日志
     * @param request 更新请求参数
     * @return 更新结果
     */
    Boolean update(TraceabilityLogsRequest request);

    /**
     * 删除追溯日志
     * @param id 日志ID
     * @return 删除结果
     */
    Boolean delete(Long id);

    /**
     * 获取追溯日志详情
     * @param id 日志ID
     * @return 日志详情
     */
    TraceabilityLogs getDetail(Long id);
    
    /**
     * 根据批次ID获取对应的所有日志
     * @param batchId 批次ID
     * @return 日志列表
     */
    List<TraceabilityLogs> getLogsByBatchId(Long batchId);

    /**
     * 根据可追溯项ID或批次ID获取对应的所有日志
     * @param traceableItemId 可追溯项ID
     * @param batchId 批次ID
     * @return 日志列表
     */
    List<TraceabilityLogs> getLogsByTraceableItemIdOrBatchId(Long traceableItemId, Long batchId);
}
